package com.wx.tnsadmin.service.impl;


import com.wx.tnsadmin.mapper.UmsMenuMapper;
import com.wx.tnsadmin.model.UmsAdminModel;
import com.wx.tnsadmin.model.UmsMenuModel;
import com.wx.tnsadmin.model.UmsRoleModel;
import com.wx.tnsadmin.service.UmsMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @Author:LLH
 * @Date:2020/8/10
 */

@Service
public class UmsMenuServiceImpl implements UmsMenuService {
    @Autowired
    private UmsMenuMapper umsMenuMapper;


    @Override
    public List<UmsMenuModel> findAllMenu () {


        //找到主菜单,存入map
        List<UmsMenuModel> allMenus = umsMenuMapper.findAllMenu ( );
        HashMap<Integer, UmsMenuModel> map = new HashMap<> ( );

        for (UmsMenuModel u : allMenus) {
            map.put ( u.getId ( ),u );
        }


        allMenus.clear ( );
        //找到主菜单下的子菜单 添加到主菜单

        for (Integer id : map.keySet ( )) {
            UmsMenuModel um = map.get ( id );
            //找到父对象
            if (um.getPid ( ) != 0) {
                UmsMenuModel umz = map.get ( um.getPid ( ) );
                //初始化父对象children
                if (umz.getChildren ( ) == null) {
                    umz.setChildren ( new ArrayList<> ( ) );
                }
                //加为其子级
                umz.getChildren ( ).add ( um );
            }
        }

        //返回结果
        for (Integer id : map.keySet ( )) {
            UmsMenuModel um = map.get ( id );
            if (um.getPid ( ) == 0) {
                allMenus.add ( map.get ( id ) );
            }
        }
        return allMenus;
    }

    @Override
    public Integer addMenu ( UmsMenuModel umsMenuModel ) {
        String path = "";
        if (umsMenuModel.getPid ( ) == null) {
            //默认一级菜单
            umsMenuModel.setPid ( 0 );
            umsMenuModel.setMenu_type ( 1 );
            //新增数据（未生成路径）
            umsMenuMapper.addMenu ( umsMenuModel );
            //生成路径
            path = umsMenuModel.getId ( ).toString ( );
        } else {
            //子级菜单
            umsMenuModel.setMenu_type ( umsMenuModel.getMenu_type ( ) + 1 );
            //新增数据（未生成路径）
            umsMenuMapper.addMenu ( umsMenuModel );
            //生成路径
            path = findByMenuId ( umsMenuModel.getPid ( ) ).getPath ( ) + "-" + umsMenuModel.getId ( );
        }
        //修改数据（保存路径）
        umsMenuModel.setPath ( path );
        return umsMenuMapper.updateMenu ( umsMenuModel );
    }

    @Override
    public Integer updateMenu ( UmsMenuModel umsMenuModel ) {
        if (umsMenuModel.getPid ( ) == null) {
            umsMenuModel.setPid ( 0 );
            umsMenuModel.setMenu_type ( 1 );
        }
        return umsMenuMapper.updateMenu ( umsMenuModel );
    }

    @Override
    public Integer deleteMenu ( Integer id ) {
        return umsMenuMapper.deleteMenu ( id );
    }

    @Override
    public UmsMenuModel findByMenuId ( Integer id ) {
        return umsMenuMapper.findByMenuId ( id );
    }


    @Override
    public void deleteMenuList ( String list ) {
        String[] ids = list.split ( "," );
        for (String id : ids) {
            deleteMenu ( Integer.valueOf ( id ) );
        }
    }


}
